package algorithm.leetcode.simple;

/**
 * 字符串相关练习
 *
 * @author jack.wu
 * @version 1.0
 * @date 2020/8/17
 */
public class Question8 {

    public int myAtoi(String str) {
        str = str.trim();
        if (str.length() == 0) {
            return 0;
        }
        char first = str.charAt(0);
        // 第一位是否是数字
        boolean isNumber = Character.isDigit(first);
        // 第一位是否是 + 或者 -
        boolean isSymbol = first == '+' || first == '-';
        if (!isNumber && !isSymbol) {
            return 0;
        }

        int res = 0;
        boolean isNegative = first == '-';
        // 按上面走下来 第一位必然就是 数字 || + || - 如果是符号 则起始位为1
        int start = !Character.isDigit(first) ? 1 : 0;
        // 遍历str，并且是数字
        while (start < str.length() && Character.isDigit(str.charAt(start))) {
            // 判断范围
            int temp = ((isNegative ? Integer.MIN_VALUE : Integer.MIN_VALUE + 1) + (str.charAt(start) - '0')) / 10;
            if (temp > res) {
                return isNegative ? Integer.MIN_VALUE : Integer.MAX_VALUE;
            }
            // 由于charAt是ascll码
            res = res * 10 - (str.charAt(start++) - '0');
        }
        return isNegative ? res : -res;
    }

    public static void main(String[] args) {
        String str = "123";
        Question8 stringTest = new Question8();
        int atoi = stringTest.myAtoi(str);
        System.out.println(atoi);
    }
}
